
// 声明一个名称为 BigInteger 的对象
function BigInteger( s ){

    // 为避免后续程序修改 integer 变量的值，这里使用const
    const integer = BigInt( s ) ;

    this.toString = function(){
        // integer 是个 bigint 值，需要转换为 string 后再返回
        return integer + '' ; // 近"串"者"串"
    }

    // 注意这个函数不接受任何参数
    this.toBinaryString = function(){
        if( arguments.length > 0 ) {
            let ex = new Error('不可以传参数哦');
            throw ex ;
        }

        let binary = '' ; // 二进制字符串
        /*
        let m = integer ; // 初始化部分
        while( m !== 0n ){ // 条件判断部分
            // 先除以二求余数
            let y = m % 2n ;
            binary = y + binary ;
            console.log( '商: ' , m , '余: ' + y , 'binary: ' , binary );
            // 再除以二求商并赋值
            m = m / 2n ; // 迭代部分(即让控制循环的变量得以变化的部分)
        }
        console.log( '商: ' , m , 'binary: ' , binary );
        */

        for( let m = integer ; m !== 0n ; m /= 2n ){
            let y = m % 2n ;
            binary = y + binary ;
            console.log( '商: ' , m , '余: ' + y , 'binary: ' , binary );
        }

        return binary ;
    }

}



let x = new BigInteger( '9527' );
let s = x.toString() ;
console.log( s ,typeof(s) );

let d = new BigInteger( '9' );
let t = d.toBinaryString();
console.log( t ,typeof(t) );